package com.zenithmind.version.pojo.domain;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 标签统计信息实体类 - 遵循单一职责原则，专门处理标签统计数据
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("version_tag_statistics")
@Schema(description = "标签统计信息实体")
public class TagStatistics extends BaseEntity {

    /**
     * 标签ID
     */
    @Schema(description = "标签ID")
    private String tagId;

    /**
     * 下载次数
     */
    @Schema(description = "下载次数")
    private Integer downloadCount;

    /**
     * 创建者名称
     */
    @Schema(description = "创建者名称")
    private String creatorName;

    /**
     * 创建者邮箱
     */
    @Schema(description = "创建者邮箱")
    private String creatorEmail;

    /**
     * 附件列表（JSON格式）
     */
    @Schema(description = "附件列表（JSON格式）")
    private String attachments;

    /**
     * 检查是否有下载记录
     * 
     * @return 是否有下载记录
     */
    public boolean hasDownloads() {
        return downloadCount != null && downloadCount > 0;
    }
    
    /**
     * 检查是否为热门标签
     * 
     * @return 是否为热门标签（下载次数超过100）
     */
    public boolean isPopularTag() {
        return downloadCount != null && downloadCount > 100;
    }
    
    /**
     * 检查是否有附件
     * 
     * @return 是否有附件
     */
    public boolean hasAttachments() {
        return attachments != null && !attachments.trim().isEmpty() && !"[]".equals(attachments.trim());
    }
    
    /**
     * 获取下载热度等级
     * 
     * @return 热度等级（1-5）
     */
    public int getPopularityLevel() {
        if (downloadCount == null || downloadCount == 0) {
            return 1; // 无下载
        } else if (downloadCount < 10) {
            return 2; // 低热度
        } else if (downloadCount < 50) {
            return 3; // 中等热度
        } else if (downloadCount < 100) {
            return 4; // 高热度
        } else {
            return 5; // 非常热门
        }
    }
    
    /**
     * 增加下载次数
     */
    public void incrementDownloadCount() {
        if (downloadCount == null) {
            downloadCount = 1;
        } else {
            downloadCount++;
        }
    }
    
    /**
     * 重置下载次数
     */
    public void resetDownloadCount() {
        downloadCount = 0;
    }
    
    /**
     * 获取格式化的下载次数
     * 
     * @return 格式化的下载次数字符串
     */
    public String getFormattedDownloadCount() {
        if (downloadCount == null || downloadCount == 0) {
            return "0";
        } else if (downloadCount < 1000) {
            return downloadCount.toString();
        } else if (downloadCount < 1000000) {
            return String.format("%.1fK", downloadCount / 1000.0);
        } else {
            return String.format("%.1fM", downloadCount / 1000000.0);
        }
    }
}
